﻿using System.Text;
using System.Web;
using System.Web.Mvc;

namespace SCB.Presentation.Helpers
{
    public static class MenuHelper
    {
        private static string GetBackLink(SiteMapNode parentNode)
        {
            return "<li class='li-back'><a href='" + parentNode.Url + "' title='" +

                parentNode.Title + "'></a></li>";
        }

        public static string Menu(this HtmlHelper helper)
        {
            var sb = new StringBuilder();
            SiteMapNodeCollection siteMapNodeCollection;
            sb.Append("<ul>");
            if (!SiteMap.CurrentNode.Equals(SiteMap.RootNode))
            {
                if (!SiteMap.CurrentNode.HasChildNodes)
                {
                    sb.Append(GetBackLink(SiteMap.CurrentNode.ParentNode.ParentNode));
                }
                else
                {
                    sb.Append(GetBackLink(SiteMap.CurrentNode.ParentNode));
                }
            }
            if (!SiteMap.CurrentNode.HasChildNodes)
            {
                siteMapNodeCollection = SiteMap.CurrentNode.ParentNode.ChildNodes;
            }
            else
            {
                siteMapNodeCollection = SiteMap.CurrentNode.ChildNodes;
            }
            foreach (SiteMapNode node in siteMapNodeCollection)
            {
                if (node.Description.Equals("hidden"))
                {
                    continue;
                }
                if (node.Url.Length == 0 && node.Description.Equals("separator"))
                {
                    sb.Append("<li class=\"li-separator\"></li>");
                }
                else if (node.Url.Length == 0 && node.Description.Equals("heading"))
                {
                    sb.Append("<li class=\"li-heading\">" + node.Title + "</li>");
                }
                else
                {
                    if (node.HasChildNodes)
                    {
                        if (node.NextSibling != null)
                        {
                            sb.Append("<li class=\"li-sub\"><a href=\"" + node.Url + "\">" + node.Title +
                                      "</a></li>");
                        }
                        else
                        {
                            sb.Append("<li class=\"li-sub last-child\"><a href=\"" + node.Url + "\">" + node.Title +
                                      "</a></li>");
                        }
                    }
                    else
                    {
                        if (node.NextSibling != null)
                        {
                            sb.Append("<li><a href='" + node.Url + "'>" + node.Title + "</a></li>");
                        }
                        else
                        {
                            sb.Append("<li class='last-child'><a href='" + node.Url + "'>" + node.Title +
                                      "</a></li>");
                        }
                    }
                }
            }
            sb.Append("</ul>");
            return sb.ToString();
        }
    }
}